home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1996 #6 / Amiga Plus CD - 1996 - No. 06.iso / pd / tools / pc-heiniv0.56 / source / popgroup.h < prev    next >
C/C++ Source or Header  |  1996-08-02  |  9KB  |  292 lines

  1. /*
  2. **
  3. **    popgroup.h  Release 1
  4. **
  5. **    Popgroup Class
  6. **    derived from MUIC_Group Class
  7. **    includes a panel with controlling functions
  8. **    for the Textwd Object (also opened).
  9. **    handles a Filerequester for opening Textfiles
  10. **    and a Stringreuester for searching Strings in
  11. **    the loaded text
  12. **
  13. **    ©1996 Ctryxx/Trinomic (Stephan Quitzsch)
  14. **
  15. */
  16.  
  17. #include <intuition/intuitionbase.h>
  18.  
  19. #define Popgroup_Base        0x3        // First digit
  20.  
  21. #define MUIM_Popgroup_Pop    0x301
  22. #define MUIM_Popgroup_Unpop    0x302
  23. #define MUIM_Popgroup_Toggle    0x303
  24. #define MUIM_Popgroup_Gname    0x304
  25. #define MUIM_Popgroup_Freq    0x305
  26.  
  27. #define SWIN_OK            901
  28. #define SWIN_CANCEL            902
  29.  
  30. /*============================================================================*/
  31.  
  32. struct MUI_CustomClass *CL_Popgroup;
  33.  
  34. /*============================================================================*/
  35.  
  36. struct MUIP_Popgroup_Pop { ULONG MethodID; char *command; };
  37.  
  38. /*============================================================================*/
  39.  
  40. struct TagItem Reqtags[] =
  41. {    ASL_Hail,        (ULONG)"Select Text-file to load",
  42.     ASL_Window,    NULL,
  43.     ASL_LeftEdge,    60,
  44.     ASL_TopEdge,    10,
  45.     ASL_Height,    250,
  46.     ASL_Width,    520,    
  47.     TAG_DONE
  48. };
  49.  
  50.  
  51. /*============================================================================*/
  52. /*= Popgroup class                                                           =*/
  53. /*============================================================================*/
  54.  
  55. struct Popgroup_Data
  56. {    BOOL popped;                    // Panel popped?
  57.  
  58.     APTR mui_panel;                // Objects
  59.     APTR    mui_next;
  60.     APTR mui_back;
  61.     APTR mui_search;
  62.     APTR mui_sfwd;
  63.     APTR mui_sbwd;
  64.     APTR    mui_path;
  65.     APTR mui_pathsel;
  66.     APTR    mui_textview;
  67.  
  68.     struct FileRequester *frequest;    // File Requester
  69. };
  70.  
  71.  
  72. /*============================================================================*/
  73.  
  74. ULONG Popgroup_Freq( struct IClass *cl, Object *obj, Msg msg )        // get Filename from Requester
  75. {
  76.     struct Popgroup_Data *data = INST_DATA( cl, obj );
  77.     char fname[256];
  78.  
  79.     Reqtags[1].ti_Data = (ULONG) IntuitionBase->ActiveWindow;        // I know, it`s a bit of a hack...
  80.     if ( MUI_AslRequest(data->frequest, Reqtags) )
  81.     {
  82.         strcpy( fname, data->frequest->rf_Dir );
  83.         AddPart( fname, data->frequest->rf_File, 255 );
  84.         DoMethod( data->mui_textview, MUIM_Textwd_Load, fname );
  85.     }
  86.  
  87.     return 0l;
  88. }
  89.  
  90.  
  91. ULONG Popgroup_Gname( struct IClass *cl, Object *obj, Msg msg )        // get string to search for
  92. {
  93.     struct Popgroup_Data *data = INST_DATA( cl, obj );
  94.  
  95.     APTR mui_swin;                                            // own string-requester
  96.     APTR mui_sstr;
  97.     APTR mui_ok;
  98.     APTR mui_can;
  99.  
  100.     LONG app = xget( obj, MUIA_ApplicationObject );
  101.  
  102.     DoMethod( data->mui_textview, MUIM_List_Select, MUIV_List_Select_All, MUIV_List_Select_Off, 0l );
  103.  
  104.     mui_swin = WindowObject,                                    // Requester-object
  105.         MUIA_Window_ID, 0x50434831,
  106.         MUIA_Window_Title, "Enter String to search",
  107.         MUIA_Window_RootObject, MUI_NewObject
  108.         (    MUIC_Group,
  109.             MUIA_Group_Child, mui_sstr = MUI_NewObject
  110.             (    MUIC_String,
  111.                 MUIA_Frame, MUIV_Frame_String,
  112.                 TAG_DONE
  113.             ),
  114.             MUIA_Group_Child, MUI_NewObject
  115.             (    MUIC_Group,
  116.                 MUIA_Group_Horiz, TRUE,
  117.                 MUIA_Group_Child, mui_ok  = KeyButton( "Start", 's' ),
  118.                 MUIA_Group_Child, mui_can = KeyButton( "Cancel", 'c' ),
  119.                 TAG_DONE
  120.             ),
  121.             TAG_DONE
  122.         ),
  123.     End;
  124.     DoMethod( mui_swin, MUIM_Window_SetCycleChain, mui_sstr, mui_ok, mui_can, NULL );
  125.  
  126.     if( mui_swin )                                            // If Object-creation succeded...
  127.     {
  128.         BOOL running = TRUE;
  129.         ULONG sigs;
  130.                                                         // add it to Application Object
  131.         DoMethod( app, OM_ADDMEMBER, mui_swin );
  132.  
  133.         DoMethod( mui_sstr, MUIM_Notify, MUIA_String_Acknowledge, MUIV_EveryTime, data->mui_textview, 2, MUIM_Textwd_Seek, MUIV_TriggerValue );
  134.         DoMethod( mui_sstr, MUIM_Notify, MUIA_String_Acknowledge, MUIV_EveryTime, app, 2, MUIM_Application_ReturnID, SWIN_CANCEL );
  135.         DoMethod( mui_ok, MUIM_Notify, MUIA_Pressed, FALSE, data->mui_textview, 2, MUIM_Textwd_Seek, xget(mui_sstr, MUIA_String_Contents) );
  136.         DoMethod( mui_ok, MUIM_Notify, MUIA_Pressed, FALSE, app, 2, MUIM_Application_ReturnID, SWIN_CANCEL );
  137.         DoMethod( mui_swin,    MUIM_Notify, MUIA_Window_CloseRequest, TRUE, app, 2, MUIM_Application_ReturnID, SWIN_CANCEL );
  138.         DoMethod( mui_can, MUIM_Notify, MUIA_Pressed, FALSE, app, 2, MUIM_Application_ReturnID, SWIN_CANCEL );
  139.  
  140.         set( mui_swin, MUIA_Window_Open, TRUE );
  141.         set( (APTR)xget(obj, MUIA_WindowObject), MUIA_Window_Sleep, TRUE );    // accept no input from mainwindow!!!
  142.  
  143.         while( running )
  144.         {
  145.             switch( DoMethod(app, MUIM_Application_Input, &sigs) )
  146.             {
  147.                 case MUIV_Application_ReturnID_Quit:
  148.                     shutdown( 0l );
  149.                     break;
  150.  
  151.                 case SWIN_CANCEL:
  152.                     running = FALSE;
  153.                     break;
  154.             }
  155.             if( running && sigs ) Wait( sigs );
  156.         }
  157.         set( (APTR)xget(obj, MUIA_WindowObject), MUIA_Window_Sleep, FALSE );    // wake up mainwindow
  158.         set( mui_swin, MUIA_Window_Open, FALSE );
  159.         DoMethod( app, OM_REMMEMBER, mui_swin );
  160.         MUI_DisposeObject( mui_swin );                                // kill Window Object
  161.     }
  162.     else ctryxxerror( "Can't open Search-window!" );
  163.  
  164.     return 0l;
  165. }
  166.  
  167.  
  168. ULONG Popgroup_Pop( struct IClass *cl, Object *obj, struct MUIP_Popgroup_Pop *msg )
  169. {                                                                // pop panel
  170.     struct Popgroup_Data *data = INST_DATA( cl, obj );
  171.  
  172.     switch( msg->command[0] )
  173.     {
  174.         case 'p':                                                    // pop
  175.             data->popped = TRUE;
  176.             set( data->mui_panel, MUIA_ShowMe, data->popped );
  177.             break;
  178.  
  179.         case 'u':                                                    // unpop
  180.             data->popped = FALSE;
  181.             set( data->mui_panel, MUIA_ShowMe, data->popped );
  182.             break;
  183.  
  184.         case 't':                                                    // toggle
  185.             data->popped = !data->popped;
  186.             set( data->mui_panel, MUIA_ShowMe, data->popped );
  187.             break;
  188.     }
  189.     return 0l;
  190. }
  191.  
  192.  
  193. ULONG Popgroup_New( struct IClass *cl, Object *obj, Msg msg )
  194. {
  195.     APTR mui_panel;
  196.     APTR    mui_next;
  197.     APTR mui_back;
  198.     APTR mui_search;
  199.     APTR mui_sfwd;
  200.     APTR mui_sbwd;
  201.     APTR    mui_path;
  202.     APTR mui_pathsel;
  203.     APTR    mui_textview;
  204.  
  205.     struct Popgroup_Data *data;
  206.  
  207.     obj = (Object*) DoSuperNew( cl, obj,
  208.         Child, mui_panel = VGroup,
  209.             MUIA_Frame, MUIV_Frame_Group,
  210.                 Child, HGroup,
  211.                 Child, mui_back =    SimpleButton( "<" ),
  212.                 Child, mui_next =    SimpleButton( ">" ),
  213.                 Child, mui_search =    SimpleButton( "Search" ),
  214.                 Child, mui_sfwd =    SimpleButton( "Fwd" ),
  215.                 Child, mui_sbwd =    SimpleButton( "Bwd" ),
  216.             End,
  217.             Child, HGroup,
  218.                 Child, mui_path = StringObject,
  219.                     MUIA_Frame, MUIV_Frame_String,
  220.                 End,
  221.                 Child, mui_pathsel = ImageObject,
  222.                     MUIA_Image_Spec, MUII_PopFile,
  223.                     MUIA_Image_FreeVert, TRUE,
  224.                     MUIA_Image_FreeHoriz, TRUE,
  225.                     MUIA_FixWidth, 14,
  226.                     MUIA_InputMode, MUIV_InputMode_RelVerify,
  227.                     MUIA_Frame, MUIV_Frame_Button,
  228.                 End,
  229.             End,
  230.         End,
  231.         Child, mui_textview = NewObject( CL_Textwd->mcc_Class, NULL, TAG_DONE ),
  232.     TAG_DONE
  233.     );
  234.     data = INST_DATA( cl, obj );
  235.  
  236.     data->mui_panel    = mui_panel;
  237.     data->mui_next     = mui_next;
  238.     data->mui_back     = mui_back;
  239.     data->mui_search   = mui_search;
  240.     data->mui_sfwd     = mui_sfwd;
  241.     data->mui_sbwd     = mui_sbwd;
  242.     data->mui_path     = mui_path;
  243.     data->mui_pathsel  = mui_pathsel;
  244.     data->mui_textview = mui_textview;
  245.  
  246.     if ( !(data->frequest = MUI_AllocAslRequest(ASL_FileRequest, NULL)) ) ctryxxerror( "Could not allocate Asl-Filerequester!" );
  247.  
  248.  
  249.     DoMethod( obj, MUIM_Popgroup_Pop, "p" );
  250.     DoMethod( data->mui_pathsel, MUIM_Notify, MUIA_Pressed, FALSE, obj, 1, MUIM_Popgroup_Freq );
  251.     DoMethod( data->mui_path, MUIM_Notify, MUIA_String_Acknowledge, MUIV_EveryTime, data->mui_textview, 2, MUIM_Textwd_Load, MUIV_TriggerValue );
  252.     DoMethod( data->mui_textview, MUIM_Notify, MUIA_Textwd_File, MUIV_EveryTime, data->mui_path, 3, MUIM_Set, MUIA_String_Contents, MUIV_TriggerValue );
  253.  
  254.     DoMethod( data->mui_sfwd, MUIM_Notify, MUIA_Pressed, FALSE, data->mui_textview, 1, MUIM_Textwd_Nsk  );
  255.     DoMethod( data->mui_sbwd, MUIM_Notify, MUIA_Pressed, FALSE, data->mui_textview, 1, MUIM_Textwd_Bsk  );
  256.     DoMethod( data->mui_next, MUIM_Notify, MUIA_Pressed, FALSE, data->mui_textview, 1, MUIM_Textwd_Next );
  257.     DoMethod( data->mui_back, MUIM_Notify, MUIA_Pressed, FALSE, data->mui_textview, 1, MUIM_Textwd_Back );
  258.     DoMethod( data->mui_search, MUIM_Notify, MUIA_Pressed, FALSE, obj, 1, MUIM_Popgroup_Gname );
  259.  
  260.     return (ULONG)obj;
  261. }
  262.  
  263.  
  264. ULONG Popgroup_Disp( struct IClass *cl, Object *obj, struct MUIP_Popgroup_Pop *msg )
  265. {
  266.     struct Popgroup_Data *data = INST_DATA( cl, obj );            // Dispose PopgroupObject and Filerequester
  267.  
  268.     if ( data->frequest ) MUI_FreeAslRequest( data->frequest );
  269.     return (ULONG)DoSuperMethodA( cl, obj, msg );
  270. }
  271.  
  272.  
  273. __saveds __asm ULONG Popgroup_Dispatcher( register __a0 struct IClass *cl, register __a2 Object *obj, register __a1 Msg msg )
  274. {
  275.     struct Popgroup_Data *data = INST_DATA( cl, obj );
  276.  
  277.     switch ( msg->MethodID )
  278.     {
  279.         case OM_NEW:            return( Popgroup_New  ( cl, obj, (APTR)msg ));
  280.         case OM_DISPOSE:        return( Popgroup_Disp ( cl, obj, (APTR)msg ));
  281.         case MUIM_Popgroup_Pop:    return( Popgroup_Pop  ( cl, obj, (APTR)msg ));
  282.         case MUIM_Popgroup_Gname:return( Popgroup_Gname( cl, obj, (APTR)msg ));
  283.         case MUIM_Popgroup_Freq:    return( Popgroup_Freq ( cl, obj, (APTR)msg ));
  284.     }
  285.  
  286.     if( (msg->MethodID)>>8 == Textwd_Base )                        // for Textwd-Class...
  287.     {    return (ULONG)DoSuperMethodA( CL_Textwd, data->mui_textview, msg );
  288.     }
  289.  
  290.     return (ULONG)DoSuperMethodA( cl, obj, msg );
  291. }
  292.